######################################################################################################
######################### Aula 04 - Analise exploratoria de dados ####################################
######################################################################################################


getwd()
setwd("C:/Users/Owner/Documents/BIE5782/Aula.04")
getwd()

save.image("exercicios.aula4.RData")


######################################################################################################
######################################### Exercicios #################################################
######################################################################################################

#############################
######## 4.2 Cerveja ########
#############################

cervejas <-c("chope","lata","garrafa","chope","garrafa", "garrafa","lata","lata","nenhuma","lata","garrafa","garrafa", "garrafa","lata","lata","lata","garrafa","lata","chope","nenhuma", "garrafa","garrafa","garrafa","chope","garrafa","garrafa","chope","garrafa","lata","lata")

#1.Represente este resultado como um grafico de barras e um dotplot (funcao: dotchart)

table(cervejas)
cervejas.table <- sort(table(cervejas), decreasing=T)

## Barplot ##

#Opcao 1: Proporcoes relativas de cada tipo de cerveja
sum(cervejas.table)
cervejas.1 <- cervejas.table/sum(cervejas.table) * 100 #proporcao de cada cerveja
cervejas.1
barplot(cervejas.1)
barplot(cervejas.1, xlab="Proporo (%)", ylab="Tipo de cerveja preferida", horiz=T, las=0.5)
barplot(cervejas.1, xlab="Tipo de cerveja preferida", ylab="Proporo (%)", horiz=F, las=0.5)

#Opcao 2: Quantidades absolutas
barplot(table(cervejas)) #faz um grafico de barras com quantidades absolutas
barplot(sort(table(cervejas), decreasing=T)) #ordena de forma decrescente
barplot(sort(table(cervejas), decreasing=T), xlab="Tipo de cerveja preferida", ylab="Numero de pessoas", horiz=F, las=0.5)
barplot(sort(table(cervejas), decreasing=T), xlab="Numero de pessoas", ylab="Tipo de cerveja preferida", horiz=T, las=0.5)


## Dotplot ##
cervejas.1 #proporcoes relativas de cada cerveja

par(mfrow=c(2,1))
dotchart(as.numeric(cervejas.1), labels=c("garrafa","lata","chope","nenhuma"), xlab="Proporo (%)") #dotchart das proporcoes relativas de cada cerveja
dotchart(as.numeric(table(cervejas)), labels=c("garrafa","lata","chope","nenhuma"), xlab="Numero de pessoas") #dotchart das quantidades absolutas de cada cerveja
par(mfrow=c(1,1))


#2.Qual tem maior razo dado/tinta?
par(mfrow=c(2,1))
barplot(cervejas.1, xlab="Proporo (%)", ylab="Tipo de cerveja preferida", horiz=T, las=0.5)
dotchart(as.numeric(cervejas.1), labels=c("garrafa","lata","chope","nenhuma"), xlab="Proporo (%)")
par(mfrow=c(1,1))

#Resposta:
#O grafico dotplot.Nesse tipo de grafico, basta olharmos para a posicao relativa dos pontos para entendermos, de forma rapida e direta, a relacao entre as categorias.
#Ja no grafico barplot, precisamos comparar o comprimento das barras para estabelecer uma comparacao entre as categorias.


############################
####### 4.3 Caixetais ######
############################

caixeta <- read.csv("caixeta.csv", as.is=T)
str(caixeta)
summary(caixeta)
head(caixeta)


#1.Construa um histograma do dap dos fustes dos caixetais

#encontrar dap (diametro na altura do peito)
#temos cap (circunferencia na altura do peito) => CAP=pi*DAP => DAP=CAP/pi
caixeta$dap <- caixeta$cap/pi #obtem DAP a partir de CAP
caixeta$dap #cria uma nova coluna no objeto caixeta
head(caixeta) #apresenta uma nova coluna no final (dap)

hist(caixeta$dap, xlab="DAP (cm)", ylab="Frequencia absoluta") #constroi um histograma do dap de cada fuste do caixetal


#2.Construa histogramas da altura das rvores para os diferentes caixetais ('local').

#o exercicio pede a altura das arvores, nao dos fustes
  #hist (caixeta$h [caixeta$local== "chauas"])
  #cada linha representa um fuste, nao uma arvore
  #para arvores com mais de um fuste, os valores serao repetidos no histograma

#eh preciso agrupar por arvore
caixeta.2 <- aggregate(x=caixeta$h, by=list(arvore=caixeta$arvore, local=caixeta$local), FUN=max)
names(caixeta.2)[3]<-"altura.arvore"
head(caixeta.2)

unique(caixeta.2$local) #mostra os nomes dos locais

par(mfrow=c(3,1)) #para comparar os tres histogramas
hist (caixeta.2$altura.arvore [caixeta.2$local== "chauas"], xlab="Altura das arvores (cm)", ylab="Frequencia", main="Histograma Altura - Chauas", col="blue") #histograma da altura das arvores para o local chauas
hist (caixeta.2$altura.arvore [caixeta.2$local== "jureia"], xlab="Altura das arvores (cm)", ylab="Frequencia", main="Histograma Altura - Jureia", col="red") #histograma da altura das arvores para o local jureia
hist (caixeta.2$altura.arvore [caixeta.2$local== "retiro"], xlab="Altura das arvores (cm)", ylab="Frequencia", main="Histograma Altura - Retiro", col="green") #histograma da altura das arvores para o local retiro
par(mfrow=c(1,1))

#############OBSERVACAO##########################
#A serie de comandos abaixo mostra uma comparacao entre o histograma de alturas por fuste x por arvore
#par(mfrow=c(3,2))
#hist (caixeta.2$altura.arvore [caixeta.2$local== "chauas"]) #por arvore
#hist (caixeta$h [caixeta$local== "chauas"]) #por fuste
#hist (caixeta.2$altura.arvore [caixeta.2$local== "jureia"]) #por arvore
#hist (caixeta$h [caixeta$local== "jureia"]) #por fuste
#hist (caixeta.2$altura.arvore [caixeta.2$local== "retiro"]) #por arvore
#hist (caixeta$h [caixeta$local== "retiro"]) #por fuste
#par(mfrow=c(1,1))
#################################################


#3.H diferenas entre as estruturas (distribuio de tamanhos) dos caixetais?

#Resposta:
#Sim. No caixetal Chauas, ha maior concentracao de arvores entre as alturas de 50 e 100 cm, como evidenciado pelo eixo de frequencias.
#Ja nos outros dois caixetais (Jureia e Retiro), a frequencia de arvores em diferentes alturas  mais distribuida ao longo de uma faixa de alturas mais ampla. Nesses dois caixetais, a frequencia de distribuicao  mais uniforme ao longo de diferentes alturas.

#No caixetal Retiro sao observadas, com maior frequencia, as arvores menores do que nos outros dois locais.
#No Retiro, ha mais arvores com alturas entre 50 e 100cm (similar ao caixetal Chauas), enquanto que na Jureia ha mais arvores entre 75 e 125cm.

###########################
###### 4.4 Eucaliptos #####
###########################

egrandis <- read.table("egrandis.csv", header=TRUE, sep=";")
str(egrandis)
summary(egrandis)
head(egrandis)

#1.Utilize o grfico boxplot para analisar o DAP de rvores de E. grandis em funo das variveis regio e rotao.

#boxplots do DAP em funcao da regiao e da rotacao SEPARADAMENTE
par(mfrow=c(1,2))
boxplot(dap~regiao, data=egrandis) #boxplot da variavel dap em funcao da regiao
boxplot(dap~rotacao, data=egrandis) #boxplot da variavel dap em funcao da rotacao
par(mfrow=c(1,1))

#bloxplot do DAP em funcao da regiao E da rotacao JUNTAS
boxplot(dap~regiao*rotacao, data=egrandis) #interacao entre 2 fatores (regiao e rotacao) sobre a variavel dap

boxname = c("Bofete.1", "Botucatu.1", "Itatinga.1", "Salto.1","Bofete.2", "Botucatu.2", "Itatinga.2", "Salto.2")
boxcor = c("blue","red","green","orange","purple","yellow","pink","gray")
boxplot(dap~regiao*rotacao, data=egrandis, names=boxname, col=boxcor, horizontal=F, las=0.5, ylab="DAP (cm)")


#2.Avalie a normalidade da altura do conjunto total de rvores com um grfico quantil-quantil contra a distribuio normal

qqnorm(egrandis$ht)
qqline(egrandis$ht)


################################
###### 4.5 Mais Caixetais ######
################################

caixeta <- read.csv("caixeta.csv", as.is=T)
caixeta
head(caixeta)

## Para calcular o DAP de rvores de mltiplos fustes...

## 1.calcule a area basal de cada fuste
##POR FUSTE: CAP=2*pi*R => R=CAP/(2*pi) => Area.basal=pi*R^2 => Area.basal=pi*(CAP^2/4*pi^2) => Area.basal=(CAP^2)/(4*pi)

caixeta$ab.fuste <- (caixeta$cap^2)/(4*pi) #calcula area basal de cada fuste
head(caixeta)

## 2. some a area basal de todos os fustes de cada arvore
caixeta.areabasal <- aggregate(caixeta$ab.fuste, by=list(local=caixeta$local,arvore=caixeta$arvore, especie=caixeta$especie), FUN=sum)
#criou novo dataframe com a soma da area basal dos fustes por arvore, local e especie

names(caixeta.areabasal)[4]<-"ab.arvore"
head(caixeta.areabasal)

##3. deduza o dap total (por arvore) a partir da area basal total (da arvore)
#Area=pi*R^2 & DAP=2*R => R^2=Area/pi => R=sqrt(Area/pi) => DAP=2*(sqrt(Area/pi))
caixeta.areabasal$dap.total <- 2*(sqrt(caixeta.areabasal$ab.arvore/pi))

head(caixeta.areabasal) #criou nova coluna com dap.total

#lembre-se que as linhas (no dataframe caixeta) so fustes e no rvores no conjunto de dados
# altura da arvore: maior altura do fuste

caixeta.altura <- aggregate(caixeta$h, by=list(local=caixeta$local,arvore=caixeta$arvore, especie=caixeta$especie), FUN=max)
#criou novo dataframe com a altura maxima por arvore, local e especie

names(caixeta.altura)[4]<-"altura.arvore"
head(caixeta.altura)

str(caixeta.areabasal)
str(caixeta.altura)
#os dois dataframe criados (com o dap total e a altura) tem o mesmo conjunto de dados e mesmo numero de observacoes
#ambos foram criados pela funcao aggregate(by=arvore,local,especie)

caixeta.final <- data.frame(caixeta.areabasal,caixeta.altura$altura.arvore)
#uniao dos dois novos dataframes com as colunas de interesse

names(caixeta.final)[6]<-"altura.arvore"
head(caixeta.final)

 
#1.Analise a relao dap-altura em funo do local com a funo plot, mas somente para as rvores de Tabebuia cassinoides

t.cassinoides <- subset (caixeta.final, caixeta.final$especie == "Tabebuia cassinoides", select=local:altura.arvore)
#extrai somente dados da especie T.cassinoides

#graficos da relacao dap-altura, por local

par(mfrow=c(1,3))
plot(dap.total~altura.arvore, data=t.cassinoides, subset=local=="chauas", xlab="Altura da arvore (cm)", ylab="DAP total (cm)", main="Relacao DAP-Altura para Chauas")
plot(dap.total~altura.arvore, data=t.cassinoides, subset=local=="jureia", xlab="Altura da arvore (cm)", ylab="DAP total (cm)", main="Relacao DAP-Altura para Jureia")
plot(dap.total~altura.arvore, data=t.cassinoides, subset=local=="retiro", xlab="Altura da arvore (cm)", ylab="DAP total (cm)", main="Relacao DAP-Altura para Retiro")
par(mfrow=c(1,1))


####################OBSERVACOES######################
#(01)a funcao plot() nao permite que seja calculada a relacao dap-altura por local em uma mesma linha de comando
#nesse caso, sao necessarios comandos separados para cada local

#(02)funcao coplot permite analisar a relacao dap-altura em funcao do local com uma unica linha de comando:
#coplot(dap.total~altura.arvore | local, data=t.cassinoides, xlab="Altura da arvore (cm)", ylab= "DAP total (cm)", main="Relacao dap-altura em funcao do local")
#coplot(dap.total~altura.arvore | local, data=t.cassinoides, panel = panel.smooth, xlab="Altura da arvore (cm)", ylab= "DAP total (cm)", main="Relacao dap-altura em funcao do local")

#(03)analisa dap.total em funcao da altura.arvore para todas as observacoes (todas as localidades juntas)
#plot(dap.total~altura.arvore, data=t.cassinoides, xlab="Altura da arvore (cm)", ylab="DAP total (cm)")
#####################################################


#2.Para a mesma relao do item anterior, verifique linearidade com a funo scatter.smooth  

#funcao scatter.smooth nao possui o argumento subset
#criar subset() para cada local

t.cassin.chauas <- subset (t.cassinoides, t.cassinoides$local == "chauas", select=local:altura.arvore)
head(t.cassin.chauas)

t.cassin.jureia <- subset (t.cassinoides, t.cassinoides$local == "jureia", select=local:altura.arvore)
head(t.cassin.jureia)

t.cassin.retiro <- subset (t.cassinoides, t.cassinoides$local == "retiro", select=local:altura.arvore)
head(t.cassin.retiro)


par(mfrow=c(1,3))

#local: chauas
scatter.smooth(x=t.cassin.chauas$altura.arvore, y=t.cassin.chauas$dap.total, xlab="Altura da arvore (cm)", ylab="DAP total (cm)", main="Relacao DAP-Altura para Chauas", col="blue")
#local: jureia
scatter.smooth(x=t.cassin.jureia$altura.arvore, y=t.cassin.jureia$dap.total, xlab="Altura da arvore (cm)", ylab="DAP total (cm)", main="Relacao DAP-Altura para Jureia", col="orange")
#local:retiro
scatter.smooth(x=t.cassin.retiro$altura.arvore, y=t.cassin.retiro$dap.total, xlab="Altura da arvore (cm)", ylab="DAP total (cm)", main="Relacao DAP-Altura para Retiro", col="green")

par(mfrow=c(1,1))


#Para fazer o scatter.smooth da relacao dap-altura para todas as localidades juntas:
#scatter.smooth (x=t.cassinoides$altura.arvore, y=t.cassinoides$dap.total, xlab="Altura da arvore (cm)", ylab="DAP total (cm)", col="blue")  

#3 .Utilizando o pacote lattice, analise a relao dap-altura ('dap' e 'h') em funo do caixetal (local), mas somente para as rvores de caixeta (Tabebuia cassinoides).

library(lattice) #carrega o pacote lattice

xyplot(dap.total~altura.arvore | local, data=t.cassinoides, xlab="Altura da arvore (cm)", ylab="DAP total (cm)")

#com a funcao xyplot(), eh possivel analisar a relacao dap-altura em funcao do local com uma unica linha de comando
#o grafico gerado eh igual aquele gerado com a funcao plot(item 1), mas naquela caso sao necessarias 3 linhas de comando, uma para cada local



